package es.udc.acs.banco.sesion;

import java.io.Serializable;

import es.udc.acs.utils.CodigosFAP;

public class RecibirMensajes extends SesionState implements Serializable {

	private static final long serialVersionUID = -1302333632004894205L;

	@Override
	public String procesarRDatos() {
		// se aceptan los mensajes de datos
		return CodigosFAP.CE_CORRECTO;
	}

	@Override
	public String procesarRControl(String tipo) {

		if (tipo.equals(CodigosFAP.CM_C_PC_FIN_RECUPERACION)) {
			return CodigosFAP.CE_NO_RECUPERACION;
		} else if (!tipo.equals(CodigosFAP.CM_C_PC_RECUPERACION)) {
			return CodigosFAP.CE_OTRAS_CAUSAS;
		}
				
		// solo CodigosFAP.CM_C_PC_RECUPERACION
		return CodigosFAP.CE_CORRECTO;
	}

	@Override
	public String obtenerEstado() {
		
		return "recibiendo";
	}

	@Override
	public boolean detenerTrafico(Sesion sesion) {

		return sesion.establecerEstado(new TraficoDetenido());	
	}

	@Override
	public boolean reanudarTrafico(Sesion sesion) {
		return false;
	}

	@Override
	public boolean aperturaSesion(Sesion sesion) {
		return false;
	}

	@Override
	public boolean cierreSesion(Sesion sesion) {
		return false;
	}

	@Override
	public boolean enRecuperacion(Sesion sesion) {
		
		try {
			sesion.setForzarRecuperacion(false);
		} catch (Exception e) {	}
		
		return sesion.establecerEstado(new EnRecuperacion());	
	}

	@Override
	public boolean finRecuperacion(Sesion sesion) {
		return false;
	}

	@Override
	public boolean puedoDetenerTrafico() {
		return true;
	}

	@Override
	public boolean puedoReanudarTrafico() {
		return false;
	}

	@Override
	public boolean puedoAperturaSesion() {
		return false;
	}

	@Override
	public boolean puedoCierreSesion() {
		return false;
	}

	@Override
	public boolean puedoEnRecuperacion() {
		return true;
	}

	@Override
	public boolean puedoFinRecuperacion() {
		return false;
	}
}
